home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Compendium Deluxe 1
/
LSD Compendium Deluxe 1.iso
/
a
/
programming
/
c
/
genmo112.lha
/
GTB-Modula
/
GenModula
/
GenerateGadgets.mod
< prev
next >
Encoding:
Amiga (detected)
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
Modula Implementation
|
1993-09-28
|
40.9 KB
|
1,466 lines
IMPLEMENTATION MODULE GenerateGadgets;
(*
* -------------------------------------------------------------------------
*
* :Program. GenModula
* :Contents. A Modula 2 Sourcecode generator for GadToolsBox
*
* :Author. Reiner B. Nix
* :Address. Geranienhof 2, 50769 Köln Seeberg
* :Address. rbnix@pool.informatik.rwth-aachen.de
* :Copyright. Reiner B. Nix
* :Language. Modula-2
* :Translator. M2Amiga A-L V4.2d
* :Imports. GadToolsBox, NoFrag by Jaan van den Baard
* :Imports. InOut, NewArgSupport by Reiner Nix
* :History. this programm is a direct descendend from
* :History. OG (Oberon Generator) 37.11 by Thomas Igracki, Kai Bolay
* :History. GenModula 1.10 (23.Aug.93) ;M2Amiga 4.0d
* :History. GenModula 1.12 (28.Sep.93) ;M2Amiga 4.2d
*
* -------------------------------------------------------------------------
*)
FROM SYSTEM IMPORT ADDRESS,
ADR, CAST;
FROM String IMPORT Length, FirstPos,
Copy, Concat;
FROM Conversions IMPORT ValToStr;
FROM FileMessage IMPORT StrPtr;
FROM ExecD IMPORT ListPtr, NodePtr;
FROM IntuitionD IMPORT WaTags, GaTags, StringaTags,
LayoutaTags, PgaTags,
ActivationFlags, ActivationFlagSet,
PropInfoFlags, PropInfoFlagSet;
FROM GadToolsD IMPORT genericKind, buttonKind, checkboxKind,
integerKind, listviewKind, mxKind, numberKind,
cycleKind, paletteKind, scrollerKind,
sliderKind, stringKind, textKind, numKinds,
GtTags,
NewGadgetFlags, NewGadgetFlagSet;
FROM UtilityD IMPORT Tag,
tagEnd,
TagItem, TagItemPtr;
FROM UtilityL IMPORT GetTagData;
FROM FileOut IMPORT Write, WriteString, WriteLn,
WriteCard, WriteInt, WriteHex;
FROM GadToolsBox IMPORT maxWindowName,
maxGadgetLabel, maxFontName,
GadgetFlags, GadgetFlagSet,
GuiFlags, GuiFlagSet,
GenCFlags,
GTConfigFlags, WindowTagFlags,
ExtNewGadgetPtr, ProjectWindowPtr,
TagInArray, CountNodes;
FROM GeneratorIO IMPORT dfile, mfile, args,
Gui, MainConfig, CConfig, Projects,
WriteFill, SeekBack, WriteText;
CONST reservedKind =10;
TYPE LabelArray =ARRAY CARDINAL OF StrPtr;
LabelPtr =POINTER TO LabelArray;
PROCEDURE WritePlaceFlags ( flags :NewGadgetFlagSet);
BEGIN
IF flags = NewGadgetFlagSet {} THEN
WriteString (mfile, "NewGadgetFlagSet {}")
ELSE
WriteString (mfile, "NewGadgetFlagSet {");
IF placetextLeft IN flags THEN
WriteString (mfile, "placetextLeft, ")
ELSIF placetextRight IN flags THEN
WriteString (mfile, "placetextRight, ")
ELSIF placetextAbove IN flags THEN
WriteString (mfile, "placetextAbove, ")
ELSIF placetextBelow IN flags THEN
WriteString (mfile, "placetextBelow, ")
ELSIF placetextIn IN flags THEN
WriteString (mfile, "placetextIn, ")
END;
IF ngHighlabel IN flags THEN
WriteString (mfile, "ngHighlabel, ")
END;
SeekBack (mfile, 2);
WriteString (mfile, "}")
END
END WritePlaceFlags;
PROCEDURE WriteGadgetConsts ( pw :ProjectWindowPtr);
PROCEDURE WriteGadgetIDs ( pw :ProjectWindowPtr);
VAR eng :ExtNewGadgetPtr;
id :CARDINAL;
offset :INTEGER;
BEGIN
IF pw^.gadgets.head^.succ # NIL THEN
offset := Length (pw^.name) + 8;
id := 1;
eng := pw^.gadgets.head;
WHILE eng^.succ # NIL DO
WriteString (dfile, "\t");
WriteString (dfile, pw^.name);
WriteString (dfile, "Gadget");
WriteString (dfile, eng^.gadgetLabel);
WriteString (dfile, "ID");
WriteFill (dfile, eng^.gadgetLabel, offset);
WriteString (dfile, "=");
WriteCard (dfile, id, 3);
Write (dfile, ";");
WriteLn (dfile);
eng := eng^.succ;
INC (id)
END;
WriteLn (dfile)
END
END WriteGadgetIDs;
(* WriteGadgetConsts *)
BEGIN
WriteGadgetIDs (pw)
END WriteGadgetConsts;
PROCEDURE WriteGadgetDefs ( pw :ProjectWindowPtr);
PROCEDURE WriteNewGadgetsDef ( pw :ProjectWindowPtr);
VAR numGadgets :CARDINAL;
eng :ExtNewGadgetPtr;
BEGIN
numGadgets := CountNodes (ADR (pw^.gadgets));
IF 0 < numGadgets THEN
WriteString (dfile, "\t");
WriteString (dfile, pw^.name);
WriteString (dfile, "GadgetList");
WriteFill (dfile, pw^.name, 10);
WriteString (dfile, ":GadgetPtr;");
WriteLn (dfile);
WriteString (dfile, "\t");
WriteString (dfile, pw^.name);
WriteString (dfile, "Gadgets");
WriteFill (dfile, pw^.name, 7);
WriteString (dfile, ":ARRAY [1..");
WriteCard (dfile, numGadgets, 2);
WriteString (dfile, "] OF GadgetPtr;");
WriteLn (dfile);
WriteString (mfile, "\t");
WriteString (mfile, pw^.name);
WriteString (mfile, "NewGadgets");
WriteFill (mfile, pw^.name, 10);
WriteString (mfile, ":ARRAY [1..");
WriteCard (mfile, numGadgets, 2);
WriteString (mfile, "] OF NewGadget;");
WriteLn (mfile)
END
END WriteNewGadgetsDef;
PROCEDURE WriteGadgetLabelDefs ( pw :ProjectWindowPtr);
VAR eng :ExtNewGadgetPtr;
labels :LabelPtr;
number :CARDINAL;
offset :INTEGER;
BEGIN
offset := Length (pw^.name) + 12;
eng := pw^.gadgets.head;
WHILE eng^.succ # NIL DO
IF (eng^.kind = cycleKind) OR (eng^.kind = mxKind) THEN
IF eng^.kind = cycleKind THEN
labels := LabelPtr (GetTagData (Tag (gtcyLabels), NIL, eng^.tags))
ELSE
labels := LabelPtr (GetTagData (Tag (gtmxLabels), NIL, eng^.tags))
END;
number := 0;
WHILE labels^[number] # NIL DO
INC (number)
END;
WriteString (mfile, "\t");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, "Labels");
WriteFill (mfile, eng^.gadgetLabel, offset);
WriteString (mfile, ":ARRAY [0..");
WriteCard (mfile, number, 2);
WriteString (mfile, "] OF StrPtr;");
WriteLn (mfile);
END;
eng := eng^.succ
END
END WriteGadgetLabelDefs;
PROCEDURE WriteGadgetListDefs ( pw :ProjectWindowPtr);
VAR eng :ExtNewGadgetPtr;
list :ListPtr;
number :CARDINAL;
offset :INTEGER;
BEGIN
offset := Length (pw^.name);
eng := pw^.gadgets.head;
WHILE eng^.succ # NIL DO
IF eng^.kind = listviewKind THEN
list := ListPtr (GetTagData (Tag (gtlvLabels), NIL, eng^.tags));
IF list # NIL THEN
WriteString (mfile, "\t");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, "List");
WriteFill (mfile, eng^.gadgetLabel, offset+10);
WriteString (mfile, ":List;");
WriteLn (mfile);
IF list^.head^.succ # NIL THEN
WriteString (mfile, "\t");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, "Nodes");
WriteFill (mfile, eng^.gadgetLabel, offset+11);
WriteString (mfile, ":ARRAY [1..");
WriteCard (mfile, CountNodes (list), 2);
WriteString (mfile, "] OF Node;");
WriteLn (mfile)
END
END
END;
eng := eng^.succ
END
END WriteGadgetListDefs;
(* WriteGadgetDefs *)
BEGIN
WriteNewGadgetsDef (pw);
WriteGadgetLabelDefs (pw);
WriteGadgetListDefs (pw)
END WriteGadgetDefs;
PROCEDURE WriteGadgetProcs ( pw :ProjectWindowPtr);
PROCEDURE WriteGadgetInit ( pw :ProjectWindowPtr);
VAR eng :ExtNewGadgetPtr;
numGadget :CARDINAL;
PROCEDURE WriteGadgetLabelInit ( eng :ExtNewGadgetPtr;
projectName :ARRAY OF CHAR);
VAR labels :LabelPtr;
number :CARDINAL;
BEGIN
IF eng^.kind = cycleKind THEN
labels := LabelPtr (GetTagData (Tag (gtcyLabels), NIL, eng^.tags))
ELSE
labels := LabelPtr (GetTagData (Tag (gtmxLabels), NIL, eng^.tags))
END;
WriteString (mfile, "dummy := TAG (");
WriteString (mfile, projectName);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, "Labels,");
WriteLn (mfile);
number := 0;
WHILE labels^[number] # NIL DO
WriteString (mfile, " ADR ('");
WriteText (mfile, labels^[number]^);
WriteString (mfile, "'),");
WriteLn (mfile);
INC (number)
END;
WriteString (mfile, " NIL);");
WriteLn (mfile);
WriteLn (mfile)
END WriteGadgetLabelInit;
PROCEDURE WriteGadgetListInit ( eng :ExtNewGadgetPtr;
projectName :ARRAY OF CHAR);
VAR varListName :ARRAY [0..maxWindowName+maxGadgetLabel+10] OF CHAR;
varNodeName :ARRAY [0..maxWindowName+maxGadgetLabel+11] OF CHAR;
list :ListPtr;
node :NodePtr;
i, nodeNumber :CARDINAL;
BEGIN
Copy (varListName, projectName);
Concat (varListName, "Gadget");
Concat (varListName, eng^.gadgetLabel);
Concat (varListName, "List");
Copy (varNodeName, projectName);
Concat (varNodeName, "Gadget");
Concat (varNodeName, eng^.gadgetLabel);
Concat (varNodeName, "Nodes");
list := ListPtr (GetTagData (Tag (gtlvLabels), NIL, eng^.tags));
WriteString (mfile, "WITH ");
WriteString (mfile, varListName);
WriteString (mfile, " DO");
WriteLn (mfile);
node := list^.head;
IF node^.succ = NIL THEN
WriteString (mfile, " head := ADR (");
WriteString (mfile, varListName);
WriteString (mfile, ".tail);");
WriteLn (mfile);
WriteString (mfile, " tail := NIL;");
WriteLn (mfile);
WriteString (mfile, " tailPred := ADR (");
WriteString (mfile, varListName);
WriteString (mfile, ".head);");
WriteLn (mfile);
ELSE
nodeNumber := CountNodes (list);
WriteString (mfile, " head := ADR (");
WriteString (mfile, varNodeName);
WriteString (mfile, "[ 1]);");
WriteLn (mfile);
WriteString (mfile, " tail := NIL;");
WriteLn (mfile);
WriteString (mfile, " tailPred := ADR (");
WriteString (mfile, varNodeName);
Write (mfile, "[");
WriteCard (mfile, nodeNumber, 2);
WriteString (mfile, "]);");
WriteLn (mfile);
END;
WriteString (mfile, " type := unknown");
WriteLn (mfile);
WriteString (mfile, " END;");
WriteLn (mfile);
WriteLn (mfile);
FOR i := 1 TO nodeNumber DO
WriteString (mfile, "WITH ");
WriteString (mfile, varNodeName);
Write (mfile, "[");
WriteCard (mfile, i, 2);
WriteString (mfile, "] DO");
WriteLn (mfile);
WriteString (mfile, " succ := ADR (");
IF i = nodeNumber THEN
WriteString (mfile, varListName);
WriteString (mfile, ".tail);")
ELSE
WriteString (mfile, varNodeName);
Write (mfile, "[");
WriteCard (mfile, i+1, 2);
WriteString (mfile, "]);")
END;
WriteLn (mfile);
WriteString (mfile, " pred := ADR (");
IF i = 1 THEN
WriteString (mfile, varListName);
WriteString (mfile, ".head);")
ELSE
WriteString (mfile, varNodeName);
Write (mfile, "[");
WriteCard (mfile, i-1, 2);
WriteString (mfile, "]);")
END;
WriteLn (mfile);
WriteString (mfile, " type := unknown;");
WriteLn (mfile);
WriteString (mfile, " pri := 0;");
WriteLn (mfile);
WriteString (mfile, " name := ADR ('");
WriteText (mfile, StrPtr (node^.name)^);
WriteString (mfile, "');");
WriteLn (mfile);
WriteString (mfile, " END;");
WriteLn (mfile);
node := node^.succ
END;
WriteLn (mfile)
END WriteGadgetListInit;
PROCEDURE WriteNewGadgetInit ( eng :ExtNewGadgetPtr;
pw :ProjectWindowPtr;
numGadget :CARDINAL);
BEGIN
WriteString (mfile, "WITH ");
WriteString (mfile, pw^.name);
WriteString (mfile, "NewGadgets[");
WriteCard (mfile, numGadget, 2);
WriteString (mfile, "] DO");
WriteLn (mfile);
WriteString (mfile, " leftEdge := ");
WriteInt (mfile, eng^.newGadget.leftEdge - INTEGER (pw^.leftBorder), 3);
Write (mfile, ";");
WriteLn (mfile);
WriteString (mfile, " topEdge := ");
WriteInt (mfile, eng^.newGadget.topEdge - INTEGER (pw^.topBorder), 3);
Write (mfile, ";");
WriteLn (mfile);
WriteString (mfile, " width := ");
WriteInt (mfile, eng^.newGadget.width, 3);
Write (mfile, ";");
WriteLn (mfile);
WriteString (mfile, " height := ");
WriteInt (mfile, eng^.newGadget.height, 3);
Write (mfile, ";");
WriteLn (mfile);
WriteString (mfile, " gadgetText := ");
IF 0 < Length (eng^.gadgetText) THEN
WriteString (mfile, "ADR ('");
WriteText (mfile, eng^.gadgetText);
WriteString (mfile, "');")
ELSE
WriteString (mfile, "NIL;");
END;
WriteLn (mfile);
WriteString (mfile, " textAttr := NIL;");
WriteLn (mfile);
WriteString (mfile, " gadgetID := ");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, "ID;");
WriteLn (mfile);
WriteString (mfile, " flags := ");
WritePlaceFlags (eng^.newGadget.flags);
Write (mfile, ";");
WriteLn (mfile);
WriteString (mfile, " visualInfo := NIL;");
WriteLn (mfile);
WriteString (mfile, " userData := NIL;");
WriteLn (mfile);
WriteString (mfile, " END;");
WriteLn (mfile)
END WriteNewGadgetInit;
(* WriteGadgetInit *)
BEGIN
eng := pw^.gadgets.head;
IF eng^.succ # NIL THEN
WriteLn (mfile);
WriteString (mfile, "PROCEDURE Init");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadgets;");
WriteLn (mfile);
WriteLn (mfile);
WriteString (mfile, "VAR");
Write (mfile, "\t");
WriteString (mfile, "dummy");
WriteFill (mfile, "", 5);
WriteString (mfile, ":ADDRESS;");
WriteLn (mfile);
WriteLn (mfile);
WriteString (mfile, "BEGIN");
WriteLn (mfile);
numGadget := 1;
WHILE eng^.succ # NIL DO
WriteString (mfile, "(* ");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, " *)");
WriteLn (mfile);
CASE eng^.kind OF
| cycleKind:
IF LabelPtr(GetTagData (Tag (gtcyLabels), NIL, eng^.tags)) # NIL THEN
WriteGadgetLabelInit (eng, pw^.name)
END;
| mxKind:
IF LabelPtr (GetTagData (Tag (gtmxLabels), NIL, eng^.tags)) # NIL THEN
WriteGadgetLabelInit (eng, pw^.name)
END;
| listviewKind:
IF LabelPtr (GetTagData (Tag (gtlvLabels), NIL, eng^.tags)) # NIL THEN
WriteGadgetListInit (eng, pw^.name)
END;
ELSE
END;
WriteNewGadgetInit (eng, pw, numGadget);
eng := eng^.succ;
INC (numGadget);
IF eng^.succ # NIL THEN
WriteLn (mfile);
WriteLn (mfile)
END
END;
WriteString (mfile, "END Init");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadgets;");
WriteLn (mfile);
WriteLn (mfile)
END
END WriteGadgetInit;
PROCEDURE WriteGadgetCreate ( pw :ProjectWindowPtr);
PROCEDURE WriteCreateGadBody ( pw :ProjectWindowPtr);
VAR ok :BOOLEAN;
i :INTEGER;
numGadget,
btop, bleft :CARDINAL;
eng :ExtNewGadgetPtr;
fontName :ARRAY [0..maxFontName] OF CHAR;
fontSize :ARRAY [0..5] OF CHAR;
PROCEDURE WriteGadgetTags ( eng :ExtNewGadgetPtr;
projectName :ARRAY OF CHAR);
VAR activation :ActivationFlagSet;
i :CARDINAL;
list :ListPtr;
PROCEDURE WriteCheckboxTags;
BEGIN
IF TagInArray (Tag (gtcbChecked), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtcbChecked,");
WriteFill (mfile, "", 12);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END
END WriteCheckboxTags;
PROCEDURE WriteCycleTags;
BEGIN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtcyLabels,");
WriteFill (mfile, "", 11);
WriteString (mfile, "ADR (");
WriteString (mfile, projectName);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, "Labels),");
WriteLn (mfile);
IF TagInArray (Tag (gtcyActive), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtcyActive,");
WriteFill (mfile, "", 11);
WriteCard (mfile, GetTagData (Tag (gtcyActive), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END
END WriteCycleTags;
PROCEDURE WriteIntegerTags;
BEGIN
IF TagInArray (Tag (gaTabCycle), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gaTabCycle,");
WriteFill (mfile, "", 11);
WriteString (mfile, "FALSE,");
WriteLn (mfile)
END;
IF TagInArray (Tag (stringaExitHelp), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "stringaExitHelp,");
WriteFill (mfile, "", 16);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END;
WriteString (mfile, "\t\t");
WriteString (mfile, "gtinNumber,");
WriteFill (mfile, "", 11);
WriteInt (mfile, GetTagData (Tag (gtinNumber), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile);
WriteString (mfile, "\t\t");
WriteString (mfile, "gtinMaxChars,");
WriteFill (mfile, "", 13);
WriteCard (mfile, GetTagData (Tag (gtinMaxChars), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile);
i := GetTagData (Tag (stringaJustification), 0, eng^.tags);
activation := CAST (ActivationFlagSet, i);
IF activation # ActivationFlagSet {} THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "stringaJustification,");
WriteFill (mfile, "", 21);
IF stringCenter IN activation THEN
WriteString (mfile, "ActivationFlagSet {stringCenter},")
ELSE
WriteString (mfile, "ActivationFlagSet {stringRight},")
END;
WriteLn (mfile)
END
END WriteIntegerTags;
PROCEDURE WriteListviewTags;
BEGIN
list := ListPtr (GetTagData (Tag (gtlvLabels), NIL, eng^.tags));
IF (list # NIL) AND (list^.head^.succ # NIL) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtlvLabels,");
WriteFill (mfile, "", 11);
WriteString (mfile, "ADR (");
WriteString (mfile, projectName);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, "List),");
WriteLn (mfile)
END;
IF NeedLock IN eng^.flags THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtlvShowSelected,");
WriteFill (mfile, "", 17);
WriteString (mfile, "gad,"); (* the previous gadget MUST be the *)
WriteLn (mfile) (* string gadget which should attached! *)
ELSIF TagInArray (Tag (gtlvShowSelected), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtlvShowSelected,");
WriteFill (mfile, "", 17);
WriteString (mfile, "NIL,");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtlvScrollWidth), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtlvScrollWidth,");
WriteFill (mfile, "", 17);
WriteInt (mfile, GetTagData (Tag (gtlvScrollWidth), 0, eng^.tags), 3);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtlvReadOnly), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtlvReadOnly,");
WriteFill (mfile, "", 13);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END;
IF TagInArray (Tag (layoutaSpacing), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "layoutaSpacing,");
WriteFill (mfile, "", 15);
WriteInt (mfile, GetTagData (Tag (layoutaSpacing), 0, eng^.tags), 3);
Write (mfile, ",");
WriteLn (mfile)
END
END WriteListviewTags;
PROCEDURE WriteMxTags;
BEGIN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtmxLabels,");
WriteFill (mfile, "", 11);
WriteString (mfile, "ADR (");
WriteString (mfile, projectName);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, "Labels),");
WriteLn (mfile);
IF TagInArray (Tag (gtmxSpacing), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtmxSpacing,");
WriteFill (mfile, "", 12);
WriteInt (mfile, GetTagData (Tag (gtmxSpacing), 0, eng^.tags), 3);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtmxActive), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtmxActive,");
WriteFill (mfile, "", 11);
WriteCard (mfile, GetTagData (Tag (gtmxActive), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END
END WriteMxTags;
PROCEDURE WritePaletteTags;
BEGIN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtpaDepth,");
WriteFill (mfile, "", 10);
WriteCard (mfile, GetTagData (Tag (gtpaDepth), 1, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile);
IF TagInArray (Tag (gtpaIndicatorWidth), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtpaIndicatorWidth,");
WriteFill (mfile, "", 19);
WriteCard (mfile, GetTagData (Tag (gtpaIndicatorWidth), 5, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtpaIndicatorHeight), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtpaIndicatorHeight,");
WriteFill (mfile, "", 20);
WriteCard (mfile, GetTagData (Tag (gtpaIndicatorHeight), 5, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtpaColor), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtpaColor,");
WriteFill (mfile, "", 10);
WriteCard (mfile, GetTagData (Tag (gtpaColor), 1, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtpaColorOffset), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtpaColorOffset,");
WriteFill (mfile, "", 16);
WriteCard (mfile, GetTagData (Tag (gtpaColorOffset), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END
END WritePaletteTags;
PROCEDURE WriteScrollerTags;
BEGIN
IF TagInArray (Tag (gtscTop), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtscTop,");
WriteFill (mfile, "", 8);
WriteCard (mfile, GetTagData (Tag (gtscTop), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtscTotal), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtscTotal,");
WriteFill (mfile, "", 10);
WriteCard (mfile, GetTagData (Tag (gtscTotal), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtscVisible), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtscVisible,");
WriteFill (mfile, "", 12);
WriteCard (mfile, GetTagData (Tag (gtscVisible), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtscArrows), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtscArrows,");
WriteFill (mfile, "", 11);
WriteCard (mfile, GetTagData (Tag (gtscArrows), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (pgaFreedom), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "pgaFreedom,");
WriteFill (mfile, "", 11);
WriteString (mfile, "freeVert,");
WriteLn (mfile)
ELSE
WriteString (mfile, "\t\t");
WriteString (mfile, "pgaFreedom,");
WriteFill (mfile, "", 11);
WriteString (mfile, "freeHoriz,");
WriteLn (mfile)
END;
IF TagInArray (Tag (gaImmediate), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gaImmediate,");
WriteFill (mfile, "", 12);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END;
IF TagInArray (Tag (gaRelVerify), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gaRelVerify,");
WriteFill (mfile, "", 12);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END
END WriteScrollerTags;
PROCEDURE WriteSliderTags;
BEGIN
IF TagInArray (Tag (gtslMin), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtslMin,");
WriteFill (mfile, "", 8);
WriteCard (mfile, GetTagData (Tag (gtslMin), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtslMax), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtslMax,");
WriteFill (mfile, "", 8);
WriteCard (mfile, GetTagData (Tag (gtslMax), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtslLevel), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtslLevel,");
WriteFill (mfile, "", 11);
WriteCard (mfile, GetTagData (Tag (gtslLevel), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtslLevelFormat), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtslLevelFormat,");
WriteFill (mfile, "", 17);
WriteString (mfile, "ADR ('");
WriteString (mfile, StrPtr (GetTagData (Tag (gtslLevelFormat), NIL, eng^.tags))^);
WriteString (mfile, "'),");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtslMaxLevelLen), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtslMaxLevelLen,");
WriteFill (mfile, "", 17);
WriteCard (mfile, GetTagData (Tag (gtslMaxLevelLen), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtslLevelPlace), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtslLevelPlace,");
WriteFill (mfile, "", 15);
WritePlaceFlags (CAST (NewGadgetFlagSet, GetTagData (Tag (gtslLevelPlace), 0, eng^.tags)));
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (pgaFreedom), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "pgaFreedom,");
WriteFill (mfile, "", 11);
WriteString (mfile, "freeVert,");
WriteLn (mfile)
ELSE
WriteString (mfile, "\t\t");
WriteString (mfile, "pgaFreedom,");
WriteFill (mfile, "", 11);
WriteString (mfile, "freeHoriz,");
WriteLn (mfile)
END;
IF TagInArray (Tag (gaImmediate), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gaImmediate,");
WriteFill (mfile, "", 12);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END;
IF TagInArray (Tag (gaRelVerify), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gaRelVerify,");
WriteFill (mfile, "", 12);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END
END WriteSliderTags;
PROCEDURE WriteStringTags;
BEGIN
IF TagInArray (Tag (gaTabCycle), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gaTabCycle,");
WriteFill (mfile, "", 11);
WriteString (mfile, "FALSE,");
WriteLn (mfile)
END;
IF TagInArray (Tag (stringaExitHelp), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "stringaExitHelp,");
WriteFill (mfile, "", 16);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END;
IF 0 < Length (eng^.gadgetText) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtstString,");
WriteFill (mfile, "", 11);
WriteString (mfile, "ADR ('");
WriteText (mfile, eng^.gadgetText);
WriteString (mfile, "'),");
WriteLn (mfile)
END;
WriteString (mfile, "\t\t");
WriteString (mfile, "gtstMaxChars,");
WriteFill (mfile, "", 13);
WriteCard (mfile, GetTagData (Tag (gtstMaxChars), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile);
i := GetTagData (Tag (stringaJustification), 0, eng^.tags);
activation := CAST (ActivationFlagSet, i);
IF activation # ActivationFlagSet {} THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "stringaJustification,");
WriteFill (mfile, "", 21);
IF stringCenter IN activation THEN
WriteString (mfile, "ActivationFlagSet {stringCenter},")
ELSE
WriteString (mfile, "ActivationFlagSet {stringRight},")
END;
WriteLn (mfile)
END
END WriteStringTags;
PROCEDURE WriteNumberTags;
BEGIN
IF TagInArray (Tag (gtnmNumber), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtnmNumber,");
WriteFill (mfile, "", 11);
WriteCard (mfile, GetTagData (Tag (gtnmNumber), 0, eng^.tags), 2);
Write (mfile, ",");
WriteLn (mfile)
END;
IF TagInArray (Tag (gtnmBorder), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtnmBorder,");
WriteFill (mfile, "", 11);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END
END WriteNumberTags;
PROCEDURE WriteTextTags;
BEGIN
IF 0 < Length (eng^.gadgetText) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gttxText,");
WriteFill (mfile, "", 9);
WriteString (mfile, "ADR ('");
WriteText (mfile, eng^.gadgetText);
WriteString (mfile, "'),");
WriteLn (mfile)
END;
IF TagInArray (Tag (gttxBorder), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gttxBorder,");
WriteFill (mfile, "", 11);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END;
IF TagInArray (Tag (gttxCopyText), eng^.tags) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gttxCopyText,");
WriteFill (mfile, "", 13);
WriteString (mfile, "TRUE,");
WriteLn (mfile)
END
END WriteTextTags;
(* WriteGadgetTags *)
BEGIN
WriteString (mfile, "gadgetTagPtr := TAG (");
WriteString (mfile, "gadgetTags,");
WriteLn (mfile);
CASE eng^.kind OF
| checkboxKind: WriteCheckboxTags
| cycleKind: WriteCycleTags
| integerKind: WriteIntegerTags
| listviewKind: WriteListviewTags
| mxKind: WriteMxTags
| paletteKind: WritePaletteTags
| scrollerKind: WriteScrollerTags
| sliderKind: WriteSliderTags
| stringKind: WriteStringTags
| numberKind: WriteNumberTags
| textKind: WriteTextTags
ELSE
END;
IF (eng^.kind # genericKind) AND
(TagInArray (Tag (gtUnderscore), eng^.tags)) THEN
WriteString (mfile, "\t\t");
WriteString (mfile, "gtUnderscore,");
WriteFill (mfile, "", 13);
WriteString (mfile, "ORD ('_'),");
WriteLn (mfile)
END;
WriteString (mfile, "\t\t");
WriteString (mfile, "tagEnd);");
WriteLn (mfile)
END WriteGadgetTags;
(* WriteCreateGadBody *)
BEGIN
btop := pw^.topBorder;
bleft:= pw^.leftBorder;
IF NOT (FontAdapt IN MainConfig.configFlags0) THEN
Copy (fontName, Gui.fontName);
i := FirstPos (fontName, 0, ".");
IF i # -1 THEN
fontName[i] := 0C
END;
ValToStr (Gui.font.ySize, FALSE, fontSize, 10, 1, " ", ok);
Concat (fontName, fontSize);
END;
numGadget := 1;
eng := pw^.gadgets.head;
WHILE eng^.succ # NIL DO
WriteLn (mfile);
WriteString (mfile, "(* ");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadget");
WriteString (mfile, eng^.gadgetLabel);
WriteString (mfile, " *)");
WriteLn (mfile);
WriteString (mfile, "ng := ");
WriteString (mfile, pw^.name);
WriteString (mfile, "NewGadgets[");
WriteCard (mfile, numGadget, 2);
WriteString (mfile, "];");
WriteLn (mfile);
WriteLn (mfile);
WriteString (mfile, "WITH ng DO");
WriteLn (mfile);
WriteString (mfile, " visualInfo := VisualInfo;");
WriteLn (mfile);
IF FontAdapt IN MainConfig.configFlags0 THEN
WriteString (mfile, " textAttr := Font;");
WriteLn (mfile);
WriteString (mfile, " leftEdge := OffX + ComputeX (leftEdge);");
WriteLn (mfile);
WriteString (mfile, " topEdge := OffY + ComputeY (topEdge);");
WriteLn (mfile);
IF eng^.kind # genericKind THEN
WriteString (mfile, " width := ComputeX (width);");
WriteLn (mfile);
WriteString (mfile, " height := ComputeY (height);");
WriteLn (mfile)
END
ELSE
WriteString (mfile, " textAttr := ADR (");
WriteString (mfile, fontName);
WriteString (mfile, ");");
WriteLn (mfile);
WriteString (mfile, " INC (leftEdge, offx);");
WriteLn (mfile);
WriteString (mfile, " INC (topEdge, offy);");
WriteLn (mfile)
END;
WriteString (mfile, " END;");
WriteLn (mfile);
WriteLn (mfile);
WriteGadgetTags (eng, pw^.name);
WriteLn (mfile);
WriteString (mfile, "gad := CreateGadgetA (");
CASE eng^.kind OF
| genericKind: WriteString (mfile, "genericKind")
| buttonKind: WriteString (mfile, "buttonKind")
| checkboxKind: WriteString (mfile, "checkboxKind")
| integerKind: WriteString (mfile, "integerKind")
| listviewKind: WriteString (mfile, "listviewKind")
| mxKind: WriteString (mfile, "mxKind")
| numberKind: WriteString (mfile, "numberKind")
| cycleKind: WriteString (mfile, "cycleKind")
| paletteKind: WriteString (mfile, "paletteKind")
| scrollerKind: WriteString (mfile, "scrollerKind")
| reservedKind: WriteString (mfile, "reservedKind")
| sliderKind: WriteString (mfile, "sliderKind")
| stringKind: WriteString (mfile, "stringKind")
| textKind: WriteString (mfile, "textKind")
END;
WriteString (mfile, ", gad^, ng, gadgetTagPtr);");
WriteLn (mfile);
WriteString (mfile, "IF gad = NIL THEN");
WriteLn (mfile);
WriteString (mfile, " RETURN 2");
WriteLn (mfile);
WriteString (mfile, " END;");
WriteLn (mfile);
WriteLn (mfile);
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadgets[");
WriteCard (mfile, numGadget, 2);
WriteString (mfile, "] := gad;");
WriteLn (mfile);
WriteLn (mfile);
IF eng^.kind = genericKind THEN
WriteString (mfile, "WITH gad^ DO");
WriteLn (mfile);
WriteString (mfile, " flags := flags + GadgetFlagSet {gadgImage,gadgHImage};");
WriteLn (mfile);
WriteString (mfile, " INCL (activation, relVerify);");
WriteLn (mfile);
WriteString (mfile, " gadgetRender := GetImage;");
WriteLn (mfile);
WriteString (mfile, " selectRender := GetImage");
WriteLn (mfile);
WriteString (mfile, " END;");
WriteLn (mfile)
END;
eng := eng^.succ;
INC (numGadget)
END
END WriteCreateGadBody;
PROCEDURE WriteCreateGadHead ( pw :ProjectWindowPtr);
BEGIN
WriteLn (dfile);
WriteString (dfile, "PROCEDURE Create");
WriteString (dfile, pw^.name);
WriteString (dfile, "Gadgets () :CARDINAL;");
WriteLn (dfile);
WriteLn (dfile);
WriteLn (mfile);
WriteString (mfile, "PROCEDURE Create");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadgets () :CARDINAL;");
WriteLn (mfile);
WriteLn (mfile);
IF NOT (FontAdapt IN MainConfig.configFlags0) THEN
WriteString (mfile, "CONST");
WriteString (mfile, "\t");
WriteString (mfile, "offx");
WriteFill (mfile, "", 4);
WriteString (mfile, "= ");
WriteCard (mfile, pw^.leftBorder, 3);
WriteString (mfile, ";");
WriteLn (mfile);
WriteString (mfile, "\t");
WriteString (mfile, "offy");
WriteFill (mfile, "", 4);
WriteString (mfile, "= ");
WriteCard (mfile, pw^.topBorder, 3);
WriteString (mfile, ";");
WriteLn (mfile);
WriteLn (mfile)
END;
WriteString (mfile, "VAR");
WriteString (mfile, "\t");
WriteString (mfile, "ng");
WriteFill (mfile, "", 2);
WriteString (mfile, ":NewGadget;");
WriteLn (mfile);
WriteString (mfile, "\t");
WriteString (mfile, "gad");
WriteFill (mfile, "", 3);
WriteString (mfile, ":GadgetPtr;");
WriteLn (mfile);
WriteString (mfile, "\t");
WriteString (mfile, "gadgetTags");
WriteFill (mfile, "", 10);
WriteString (mfile, ":ARRAY [1..30] OF TagItem;");
WriteLn (mfile);
WriteString (mfile, "\t");
WriteString (mfile, "gadgetTagPtr");
WriteFill (mfile, "", 12);
WriteString (mfile, ":TagItemPtr;");
WriteLn (mfile);
WriteString (mfile, "\t");
WriteString (mfile, "ret");
WriteFill (mfile, "", 3);
WriteString (mfile, ":CARDINAL;");
WriteLn (mfile);
WriteLn (mfile);
WriteString (mfile, "BEGIN");
WriteLn (mfile);
WriteString (mfile, "Assert (");
WriteString (mfile, pw^.name);
WriteString (mfile, "GadgetList = NIL, ADR ('");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadgets are already created!'));");
WriteLn (mfile);
WriteLn (mfile);
IF FontAdapt IN MainConfig.configFlags0 THEN
WriteString (mfile, "ComputeFont (");
WriteString (mfile, pw^.name);
WriteString (mfile, "Width, ");
WriteString (mfile, pw^.name);
WriteString (mfile, "Height);");
WriteLn (mfile)
END;
WriteString (mfile, "gad := CreateContext (");
WriteString (mfile, pw^.name);
WriteString (mfile, "GadgetList);");
WriteLn (mfile);
WriteString (mfile, "IF gad = NIL THEN");
WriteLn (mfile);
WriteString (mfile, " RETURN 1");
WriteLn (mfile);
WriteString (mfile, " END;");
WriteLn (mfile);
WriteLn (mfile)
END WriteCreateGadHead;
PROCEDURE WriteCreateGadTail ( pw :ProjectWindowPtr);
BEGIN
WriteLn (mfile);
WriteString (mfile, "RETURN 0");
WriteLn (mfile);
WriteString (mfile, "END Create");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadgets;");
WriteLn (mfile);
WriteLn (mfile)
END WriteCreateGadTail;
(* WriteGadgetCreate *)
BEGIN
IF pw^.gadgets.head^.succ # NIL THEN
WriteCreateGadHead (pw);
WriteCreateGadBody (pw);
WriteCreateGadTail (pw)
END
END WriteGadgetCreate;
(* WriteGadgetProcs *)
BEGIN
WriteGadgetInit (pw);
WriteGadgetCreate (pw)
END WriteGadgetProcs;
PROCEDURE WriteGadgetInits ( pw :ProjectWindowPtr);
BEGIN
IF pw^.gadgets.head^.succ # NIL THEN
WriteString (mfile, "Init");
WriteString (mfile, pw^.name);
WriteString (mfile, "Gadgets;");
WriteLn (mfile)
END
END WriteGadgetInits;
END GenerateGadgets.